-- if(redis.call('get',KEYS[1])==ARGV[1]) then
--     return redis.call('del',KEYS[1])
-- end
-- return 0

local key = KEYS[1];  -- 锁key
local threadId = ARGV[1];  -- 线程唯一标识
local releaseTime = ARGV[2]; -- 锁自动释放时间
--判断当前锁是否还是被自己持有
if(redis.call('hexists',key,threadId)==0) then
    return nil; --如果已经不是自己 则直接返回
end;
--是自己的锁 则重入次数-1
local count = redis.call('hincrby',key,threadId,-1);
--判断是否重入次数已经为0
if(count>0) then
    -->0说明不能释放锁 重置有效期然后返回
    redis.call('expire',key,releaseTime);
    return nil;
else --=0 说明可以释放锁
    redis.call("del",key)
    return true;
end;